#include<stdio.h>
#include<unistd.h>

int main() 
{
    char command[50];
    printf("请输入一行文本：");
    scanf("%[^\n]%*c", command);
    //%[^\n]：这部分会匹配任何非换行符的字符，
    //并将它们存储在 command 指向的字符数组中。
    //%*c：这部分会匹配一个字符，但不会存储它。这通常用于跳过换行符 \n。
    printf("你输入的文本是：%s\n", command);
    return 0;
}

/*int main() 
{
    printf("Hello, World!");
    //fflush(stdout);  // 清空 stdout 缓冲区
    sleep(3);  // 暂停 3 秒
    return 0;
}*/

/*int main()
{
    int a = 0;
    a++;
    printf("😊😊😊😊😊😊😊😊😊\n");
    execl("/usr/bin/pwd", "pwd", NULL);
    //执行完execl语句后还会执行它后面的语句吗？
    //不会。execl函数将执行一个新的程序文件，而不是返回到调用它的程序。因此，
    //如果您在execl函数之后添加任何语句，则这
    //些语句将不会执行。如果您想在execl函数之后执行其他操作，
    //则需要在新的程序文件中包含这些操作。
    printf("%d\n", a++);
    return 0;
}*/

/*是的，你说得对。execl 和 execle 函数都是 exec 函数家族的一部分，
用于在 Unix-like 系统中替换当前进程映像。这两个函数的主要区别在于是否可以自定义环境变量。
execl 函数的原型如下：
int execl(const char *path, const char *arg, ...);
execl 函数接受一个要执行的二进制文件的路径和一个以 NULL 结尾的参数列表。
它会使用当前进程的环境变量。
execle 函数的原型如下：
int execle(const char *path, const char *arg, ..., char * const envp[]);
execle 函数除了接受一个要执行的二进制文件的路径和一个以 NULL 结尾的参数列表，
还接受一个以 NULL 结尾的环境变量列表。这允许你为新的进程映像自定义环境变量。
所以，你的理解是正确的，execl 和 execle 的区别在于是否可以自定义环境变量。
int execlp(const char *file, const char *arg, ...);
😊*/

/*程序替换成功后，原进程没有退出，使用原进程运行新程序：
这也是正确的。exec 函数家族会替换当前进程的映像，但不会创建新的进程*/